<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>

  <body>
    <script type="text/javascript">
      //1.JS是什么
      Js: JavaScript是一种客户端的脚本语言,
        不属于编程语言,
        更像是一种脚本,
        JavaScript主要包含ECMAScript,
        DOM和BOM这三个组成成分,
        主要是用来为;
      页面添加格式各样的动态功能, 提升用户体验;

      //2.JS的数据类型有哪几种，哪些是简单类型变量，哪些是复杂类型变量，它们有什么区别
      总共有9种数据类型,
        其中,
        字符串(String),
        数值型(Number),
        空类型(null),
        未定义(undefined),
        布尔型(boolean),
        唯一类型(Symbol),
        这六种属于简单的数据类型,
        另外,
        对象类型(Object),
        数组类型(Array),
        函数类型(Function),
        属于复杂数据类型;

      简单数据类型可以简单的看作是一个数值,
        而复杂数类型可以看作是简单数据类型的集合,
        像数组像是一个容器将简单的数据类型存放在里面,
        对象里面的多个属性也是简单的数据类型,
        再则就是函数,
        它就是为了处理数据而存在的,
        它本身中可以定义多个参数,
        这些参数也可以;
      理解成简单的数据类型;

      //3.用代码来表示具体如何定义JS的各种类型变量

      //字符型(String)
      var str1 = 'Str1';
      var str2 = new String('Str2'); //不推荐使用这一种方法
      // 数值型(Number)
      var num1 = 1;
      var num2 = new Number(2); //不推荐使用这一种方法
      // 未定义类型(Undefined)
      var und = undefined;
      // 空类型(Null)
      var nu = null;
      // 布尔型(Boolean)
      var bool1 = false;
      var bool2 = new Boolean(true); //不推荐使用这一种方法
      // 唯一类型(Symbol)
      var kk = new Symbol('kk');

      // 数组类型(Array):
      var arr1 = [1, 2, 3, 4, 5];
      var arr2 = new Array(6, 7, 8, 9, 10);
      // 对象类型(Object):
      var person1 = {
        name: 'kayson',
        gender: 'man',
        age: 18,
        skill: function () {
          console.log('Write the Codes');
        },
      };

      for (var k in person1) {
        console.log(person1[k]);
      }

      var person2 = new Object();
      person2.name = 'LiHua';
      person2.gender = 'man';
      person2.age = 26;
      person2.skill = function () {
        console.log('Play The Piano');
      };

      for (var k in person2) {
        console.log(person1[k]);
      }

      function person(name, gender, age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.skill = function () {
          console.log('sing');
        };
      }
      var person3 = new person('lucy', 'woman', 18);
      for (var k in person1) {
        console.log(person3[k]);
      }

      // 函数类型(Function)
      function fun() {
        console.log('Hello World');
      }

      //4.undefined和Null的区别
      undefined是变量还没有声明,
        null是变量还没有赋值,
        一个完成的变量初始化包括声明与赋值两个部分;

      //5.script标签写在页面头部和底部，有何区别
      js是单线程的语言,
        执行的顺序为从上往下执行,
        逐行解析,
        在后面的DOM,
        BOM等对象操作的时候如果将script放在页面的头部,
        会导致找不到操作的对象而报错;

      //6.如何保证在页面基本结构和样式加载后，再执行我们的JS脚本
      将script放在页面的后面,
        或者使用window.addEventListener('DOMContentLoaded', function () {});
      预加载;

      //7.如何判断一个变量是属于哪种变量类型（字符串、数值、布尔值、Null、undefined、对象、数组、函数）
      第一种方法: 使用typeof去判断简单的错误,
        复杂数据类型的判断结果统一为Object;
      第二种方法: instanceof用于检测构造函数的prototype属性判断是否出现在某个实例对象的原型链上面;
      第三种方法: 使用对象的原型去判断;
      console.log(Object.prototype.toString.call(arr).slice(8, -1));

      //8.JS的注释写法有哪几种，有何区别
      单行注释; //
      多行注释; /* */

      //9.javascript引入页面有几种形式
      行内式, 内嵌式, 外链式;

      //10.var 的意义何在
      var是一个关键字, 可以声明变量;

      //11.已知数A与B，由键盘输入AB的值，交换它们的值，并输出。
      //提示，获取用户输入信息，可以使用 var user_input = prompt("请输入数字");
      var A = prompt('请输入A的数值:');
      var B = prompt('请输入B的数值:');
      var change = A;
      A = B;
      B = change;
      alert(`交换后,A:${A} B:${B}`);
    </script>
  </body>
</html>
